package t1;

import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;

/*
* 实现 指定位置的文件读入
* 具体参考 testT
*
*
*
* */

public class fileIn {
    /**
     *
     * @param file 输入需要编译的文本 对象
     * @return  返回该文本的char数组 arraylist 在后续的计算码字次数过程中 进行计算
     * @throws IOException  有可能发生io异常
     */
    public ArrayList<char[]> getStringInFile(File file) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(file));
        FileInputStream fis = new FileInputStream(file);
        ArrayList<char[]> char_array = new ArrayList<>();
//
//        byte[] bytes = new byte[1024];
//        int len=0;
//        while (!((len=fis.read(bytes))==-1)){
//            String replace = new String(bytes, 0, len).replaceAll("\\s+","");
//            char_array.add(replace.toCharArray());
//        }

        char[] chars = new char[1024];
        int len;
        while (!((len=br.read(chars))==-1)){
//            替换掉所 有空字符
//            空字符 同样需要  此处 实验

//             去掉 空字符的代码
//            String replace = new String(chars, 0, len).replaceAll("\\s+","");
//             不去掉空字符 改成 \n
//            String replace = new String(chars, 0, len).replaceAll("\\s+","\n");
//            char_array.add(replace.toCharArray());

            char_array.add(new String(chars, 0, len).toCharArray());

        }
//        关闭 输入流
        br.close();
        return char_array;
    }

//    计算码字出现的次数 并将其存入 word_sum 计算码字总数 sum  码字数组
    public WordAndWordSum getWordSum(ArrayList<char[]> chars_arrays){
        Iterator<char[]> it_chars = chars_arrays.iterator();
//        码字 字符数组 chars_arrays
        ArrayList<Character> word_array = new ArrayList<>();
//        码字出现次数的数组 word_sum
        ArrayList<Integer> word_sum = new ArrayList<>();
//        编码的文字总数 sum
        int sum=0;
//        对it_chars 进行操作
        /*
        * 对word_array 遍历 查看时候存在码字 如果存在则跳过该字符 sum+1 word_sum+1 */
        while (it_chars.hasNext()){
            char[] chars = it_chars.next();
//            从chars中抽取出单个 字符 进行判断
            for (char aChar : chars) {
//                该码字 已经存在 那么 sum+1 word_sum+1
                if (word_array.contains(aChar)){
                    sum++;
                    int index = word_array.indexOf(aChar);
                    word_sum.set(index,word_sum.get(index)+1);

                }else {  //  该字符没有在word_array中 将该字符添加 进入 word_array中 并且word_sum 指定为1  sum+1
                    word_array.add(aChar);
                    word_sum.add(1);
                    sum++;
                }
            }

        }//　所有字符数组　判断完成　　
//        将word_sum word_array sum 赋值到WordAndWordSum对象中
        return new WordAndWordSum(word_array,word_sum,sum);


    }


}
